cc.Class({
    extends: cc.Component,

    properties: {
		buttonSprite:{
			default:null,
			type:cc.SpriteFrame
		}
        // foo: {
        //    default: null,      // The default value will be used only when the component attaching
        //                           to a node for the first time
        //    url: cc.Texture2D,  // optional, default is typeof default
        //    serializable: true, // optional, default is true
        //    visible: true,      // optional, default is true
        //    displayName: 'Foo', // optional
        //    readonly: false,    // optional, default is false
        // },
        // ...
    },

	//onLoad在游戏资源加载完成时调用
	//可以理解为游戏一开始就调用
    onLoad: function () {
		
		//开始初始化全局变量
		//新建一个空对象cc.vv，用来装载全局变量
		cc.vv = {}
		//实例化工具类Utils
		//将工具类加到全局的空对象cc.vv中，方便随时使用
        var Utils = require("Utils")
        cc.vv.util = new Utils()
		
		
		//开始初始化本类中使用的变量
		//全局下标，用来指示当前对话到哪句了
		this.index = 0
		this.optionNode = this.node.getChildByName('options')
		//用于显示对话内容的Label组件，最终存入labelCom变量中
		var canvas = this.node
		var talkNode = canvas.getChildByName('TalkNode')
		var labelNode = talkNode.getChildByName('label')
		this.labelCom = labelNode.getComponent(cc.Label)
		//中转数组，用于装载按钮的位置
		this.optionPos = []
		
		//内容数组，装载所有的内容对象
		//对象中有两个属性：对话内容、立绘图片名
		this.contents = [
			{	content:'姑娘你们好啊', face:'girl1'	},
			{	content:'干嘛有事吗？', face:'girl1'	},
			{	content:'你要去干嘛啊？', face:'girl1'	},
			{	content:'要你管吗？', face:'girl1'	},
			{	content:'对不用你管。', face:'girl3', options:[
					{ op:'继续聊',	content:'你还聊啊？都说了不用你管了。', face:'girl3'},
					{ op:'还是放弃吧',	content:'好的，再见！', face:'girl1'},
				]},
		]

		var endCallback = function(){
			this.greet()
		}
		
		//注册一个点击事件，响应鼠标抬起
		this.node.on(cc.Node.EventType.TOUCH_END, endCallback, this)
    },

    greet: function () {
		var self = this
		//取到label所在的节点，最终获取label组件
		//并改变其string值，让他显示新的字符串
		
		//取到当前走到的谈话内容，用取到的对象更新对话
		var talkObject = this.contents[this.index]
		this.showTalkContent(talkObject.content,talkObject.face)
		
		//解析对话选项
		var options = talkObject.options
		//遍历所有的选项，并在界面上显示选项按钮
		if(options){
			for(var i=0;i<options.length;i++){
				var opObj = options[i]
				var op = opObj.op
				var content = opObj.content
				var face = opObj.face
				
				this.addOption(cc.p(0,i*100),op,content,face)
			}
		}else{
			this.optionNode.removeAllChildren()
		}
		

		this.index = this.index + 1
		//为防止数组越界，当越界时，回归第0个
		if(this.index == 5){
			this.index = 0
		}
    },
	
	//增加一个对话选项
	addOption:function(pos,opContent,talkContent,faceImg){
		var self = this
		
		this.optionPos.push(pos)
		
		var getPos = function(){
			var lastIndex = this.optionPos.length - 1
			var lastPos = this.optionPos[lastIndex]
			this.optionPos.splice(lastIndex,1)
			return lastPos
		}.bind(this)
		
        cc.loader.loadRes('option', function (err, prefab) {
                if (err) {
                    cc.error(err.message || err);
                    return;
                }
                var curPrefab = cc.instantiate(prefab)
                curPrefab.position = getPos()
                self.optionNode.addChild(curPrefab)
			//为这个按钮动态添加点击事件
			cc.vv.util.addClickEvent(curPrefab,self.node,'Game','onOptionClicked')
			//为了在点击事件中使用对话内容等属性，我们把想用的属性加到节点newNode上
			curPrefab.talkContent = talkContent
			curPrefab.faceImg = faceImg
        })
	},
	
	onOptionClicked:function(event){
		//取到该点击事件绑定的节点btnNode，即上面方法中的newNode
		var btnNode = event.target
		//拿出我们刚存在节点上的要使用的属性
		var talkContent = btnNode.talkContent
		var faceImg = btnNode.faceImg
		this.showTalkContent(talkContent,faceImg)
	},
	
	showTalkContent:function(content,face){
		var self = this
		this.labelCom.string = content//更改label的字
		
		//取出对象的face属性，并读取
		//读取face，并换上去
		cc.loader.loadRes(face,cc.SpriteFrame,function(err,spriteFrame) {
            var sprite = self.node.getChildByName('TalkNode').getChildByName('face').getComponent(cc.Sprite)
			sprite.spriteFrame = spriteFrame
		})
	}
});
